/**
 *   类说明
 * 
 *   @creator         xldc	497937995@qq.com  
 *   @create-time     2014年3月17日   下午8:30:22   
 */
package com.huacheng.cms.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.huacheng.cms.dao.TagMapper;
import com.huacheng.cms.model.Tag;

@Service
public class TagService {

	@Autowired
	private TagMapper tagM;

	private String SEPARATOR_PAGE = " "; // 页面中分隔符
	private String SEPARATOR_DB = "|"; // 数据库中分隔符

	public void add(String tag, long artId) {
		if (!tag.equals("")) {
			String[] tags = tag.split(" ");
			for (String t : tags) {
				popIn(t, artId);
			}
		}
	}

	public void delete(long artId) {
		popOut(artId);
	}

	public String getTagsOfArticleId(long artId) {
		String tags = "";
		String s_ArtId = SEPARATOR_DB + artId + SEPARATOR_DB;
		// 这样效率有点低，一般来说标签比较少，可以这样做。2014年3月18日 17:21:06
		List<Tag> tagList = tagM.selectBySelective(new Tag(), 0, 0);
		for (Tag tag : tagList) {
			if (tag.getArtids().indexOf(s_ArtId) != -1) {
				tags = tags + SEPARATOR_PAGE + tag.getName();
			}
		}
		return tags;
	}

	public Tag selectByPrimaryKey(String tagName) {
		return tagM.selectByPrimaryKey(tagName);
	}

	public List<Tag> getListOfArticleId(long artId) {
		List<Tag> re_list = new ArrayList<Tag>();
		String s_ArtId = SEPARATOR_DB + artId + SEPARATOR_DB;
		// 这样效率有点低，一般来说标签比较少，可以这样做。2014年3月18日 17:21:06
		List<Tag> tagList = tagM.selectBySelective(new Tag(), 0, 0);
		for (Tag tag : tagList) {
			if (tag.getArtids().indexOf(s_ArtId) != -1) {
				re_list.add(tag);
			}
		}
		return re_list;
	}

	public List<Tag> getAllList() {
		return tagM.selectBySelective(new Tag(), 0, 0);
	}

	private boolean popIn(String name, Long artId) {
		String s_artId = SEPARATOR_DB + artId + SEPARATOR_DB;
		Tag tag = tagM.selectByPrimaryKey(name);

		if (tag == null) {
			Tag t = new Tag();
			t.setName(name);
			t.setArtids(s_artId);
			t.setCount(1);
			tagM.insertSelective(t);
		} else {
			// 若是已经存在同ID 同 name 就不插入，必须加入分隔符SEPARATOR，否则就会遇到11,112提示已经存在的问题
			if (tag.getArtids().indexOf(s_artId) == -1) {
				String artIds = tag.getArtids();
				artIds = artIds + artId + SEPARATOR_DB;
				tag.setArtids(artIds);
				tag.setCount(tag.getCount() + 1);
				tagM.updateByPrimaryKeySelective(tag);
			}
		}
		return true;
	}

	private void popOut(Long artId) {
		String s_ArtId = SEPARATOR_DB + artId + SEPARATOR_DB;
		// 这样效率有点低，一般来说标签比较少，可以这样做。2014年3月18日 17:21:06
		List<Tag> tagList = tagM.selectBySelective(new Tag(), 0, 0);
		for (Tag tag : tagList) {
			if (tag.getArtids().indexOf(s_ArtId) != -1) {
				// 删除Id与之后的“|”分隔符
				tag.setArtids(tag.getArtids().replace(s_ArtId, SEPARATOR_DB));
				// 若删除之后为空“”，则删除标签名为tag.getName的标签，反之则减去一个计数
				if (tag.getArtids().equals(SEPARATOR_DB)) {
					tagM.deleteByPrimaryKey(tag.getName());
				} else {
					tag.setCount(tag.getCount() - 1);
					tagM.updateByPrimaryKeySelective(tag);
				}
			}
		}
	}
}
